// 核心函数：获取元素的文档绝对位置（不受任何滚动影响）
import { getScrollAncestors } from '$lib/utils/scroll/getScrollAncestors';
export const getElementAbsolutePos = (el: HTMLElement) => {
	if (!el) return { top: 0, left: 0, bottom: 0, right: 0, width: 0, height: 0 };

	// 步骤 A：获取元素的视口位置（受滚动影响）
	const rect = el.getBoundingClientRect();

	// 步骤 B：获取所有滚动父容器，计算总滚动偏移量
	const scrollAncestors = getScrollAncestors(el);    
	let totalScrollTop = 0;
	let totalScrollLeft = 0;

	scrollAncestors.forEach((ancestor) => {
		if (ancestor === window) {
			// 页面自身的滚动偏移
			totalScrollTop += window.scrollY || document.documentElement.scrollTop;
			totalScrollLeft += window.scrollX || document.documentElement.scrollLeft;
		} else {
			// DOM 元素的滚动偏移（父容器滚动）
			totalScrollTop += (ancestor as HTMLElement).scrollTop;
			totalScrollLeft += (ancestor as HTMLElement).scrollLeft;
		}
	});    

	// 步骤 C：计算文档绝对位置（视口位置 + 总滚动偏移）
	return {
		top: rect.top + totalScrollTop, // 绝对顶部
		left: rect.left + totalScrollLeft, // 绝对左侧
		bottom: rect.bottom + totalScrollTop, // 绝对底部
		right: rect.right + totalScrollLeft, // 绝对右侧
		width: rect.width, // 元素宽度（不变）
		height: rect.height // 元素高度（不变）
	};
};

export const getElementRelativePos = (el: HTMLElement) => {
	if (!el) return { top: 0, left: 0, bottom: 0, right: 0, width: 0, height: 0 };

	// 步骤 A：获取元素的视口位置（受滚动影响）
	const rect = el.getBoundingClientRect();

	// 步骤 C：计算文档绝对位置（视口位置 + 总滚动偏移）
	return {
		top: rect.top , // 绝对顶部
		left: rect.left , // 绝对左侧
		bottom: rect.bottom , // 绝对底部
		right: rect.right , // 绝对右侧
		width: rect.width, // 元素宽度（不变）
		height: rect.height // 元素高度（不变）
	};
};
